﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace L01
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 实现求两个正整数的最小公倍数与最大公约数
            void T1() 
            {
                Console.WriteLine("T1.实现求两个正整数的最小公倍数与最大公约数");
                Console.Write("输入第一个数a:");
                int a = int.Parse(Console.ReadLine());
                int m = a;
                Console.Write("输入第二个数b:");
                int b = int.Parse(Console.ReadLine());
                int n = b;
                while (n != 0)
                {
                    int t = m % n;
                    m = n;
                    n = t;
                }
                Console.WriteLine("{0}、{1}的最大公约数是{2}", a, b, m);
                Console.WriteLine("{0}、{1}的最小公倍数是{2}", a, b, a * b / m);
            }
            #endregion

            #region  实现对一个数组的打印输出(Output)、查找(Search)、插入排序(InsertSort)等功能
            void T2()
            {
                Console.WriteLine("T2.实现对一个数组的打印输出(Output)、查找(Search)、插入排序(InsertSort)等功能");
                int[] a = new int[] { 5, 4, 9, 7, 2, 6, 8, 1, 3, 10 };
                Output(a);
                Search(a);
                InsertSort(a);
                Output(a);

                void Output(int[] array)//打印输出
                {
                    foreach (var x in array)
                    {
                        Console.Write($"{x}\t");
                    }
                }

                void Search(int[] array)//查找
                {
                    Console.Write("查找第i个元素：");
                    int i = int.Parse(Console.ReadLine());
                    Console.WriteLine("第i个元素:{0}", a[i - 1]);
                }

                void InsertSort(int[] array)//插入排序
                {
                    Console.WriteLine("插入排序");
                    int N = array.Length;
                    int temp = 0;
                    for (int i = 0; i < N - 1; i++)
                    {
                        if (array[i] <= array[i + 1])
                            continue;
                        temp = array[i + 1];
                        for (int j = i; j >= 0; j--)
                        {
                            if (temp <= array[j])
                                array[j + 1] = array[j];
                            else
                            {
                                array[j + 1] = temp;
                                break;
                            }
                            if (j == 0)
                                array[0] = temp;

                        }
                    }
                }

            }
            #endregion

            #region  实现计算并输出圆周率的近似值
            void T3() 
            {
                Console.WriteLine("T3.实现计算并输出圆周率的近似值(公式4*（1-1/3+1/5-1/7+···+1/n））");
                double fenzi = 1.0, sum = 1.0;
                Console.Write("请输入n值：");
                int fenmu = int.Parse(Console.ReadLine());
                int temp = 1;
                for (int i = 3; i <= fenmu; i+=2)
                {
                    temp *= -1;
                    sum += fenzi/i*temp;
                }
                double PI = 4 * sum;
                Console.WriteLine("圆周率的近似值:{0}",PI);

            }

            #endregion

            T1();
            Console.WriteLine();
            T2();
            Console.WriteLine();
            T3();
            Console.WriteLine();


            Console.ReadKey();
        }
    }
}
